require '../enums.rb'

class Conferencia < ActiveRecord::Base 
  self.table_name = "conferencias"
  
  belongs_to :usuario
  
  validates :nombre, 
            :presence => {:message => '* Por favor ingrese el nombre de la conferencia'}, 
            :length => { :maximum => 45, :message=>'* Por favor verifique que el campo nombre no supere el limite establecido'},
            :uniqueness => {:message => '* El nombre de la conferencia se encuentra ocupado, por favor ingrese otro nombre'}
  validates :descripcion, :length => { :maximum => 500, :message=>'* Por favor verifique que el campo descripcion no supere el limite establecido'}
  validates :fechaInicio, :presence => {:message => '* Por favor ingrese la fecha de inicio de la conferencia'}
  validates :fechaFin, :presence => {:message => '* Por favor ingrese la fecha fin de la conferencia'}
  validates :lugar, :presence => {:message => '* Por favor ingrese el lugar en el que se realizara la conferencia'}
  validates :tiempoLimite, :presence =>  {:message => '* Por favor ingrese el tiempo limite que tendran las charlas'}
  
  validate :fecha_inicio_mayor_fecha_fin

  belongs_to :usuario

  def fecha_inicio_mayor_fecha_fin
    if (self.fechaInicio <=> self.fechaFin) ==1
      errors.add(:fechaInicio, "* Por favor verifique que la fecha de inicio sea menor a la fecha de fin") 
    end
  end 
    
  def agregarDiasFechaSinAnioActual(numeroDia)
    fechaSumada = self.fechaInicio + numeroDia
    
    if(fechaSumada.year == DateTime.now().year)
      return fechaSumada.strftime("%d-%m")
    end
    
    return fechaSumada.strftime("%d-%m-%Y")
  end
  
  def fechaInicioConferencia
    if (self.fechaInicio.nil? && self.fechaFin.nil?)
      ""
    else
      self.fechaInicio.strftime("%d-%m-%Y") 
    end
  end
  
  def fechaFinConferencia
    if (self.fechaFin.nil?)
      ""
    else
      self.fechaFin.strftime("%d-%m-%Y")
    end
  end
  
  def fechaInicioFinConferencia
    if (! self.fechaInicioConferencia.empty? && ! self.fechaFinConferencia.empty?)
      self.fechaInicioConferencia + " al " + self.fechaFinConferencia
    end
  end

  def fechaParaDia(numeroDia)
    fechaEnIngles = (self.fechaInicio + numeroDia).strftime('%A, %d de %B')
    {
      # DIAS
      "Monday" => "Lunes",
      "Tuesday" => "Martes",
      "Wednesday" => "Miercoles",
      "Thursday" => "Jueves",
      "Friday" => "Viernes",
      "Saturday" => "Sabado",
      "Sunday" => "Domingo",
      # MESES
      "January" => "Enero",
      "February" => "Febrero",
      "March" => "Marzo",
      "April" => "Abril",
      "May" => "Mayo",
      "June" => "Junio",
      "July" => "Julio",
      "August" => "Agosto",
      "September" => "Septiembre",
      "October" => "Octubre",
      "November" => "Noviembre",
      "December" => "Diciembre"
    }.each do |ingles, castellano|
      fechaEnIngles = fechaEnIngles.gsub(ingles, castellano)
    end
    fechaEnIngles
  end
  
  def diasDeDuracion()
    return (self.fechaFin- self.fechaInicio).to_i + 1
  end
  
  def cargarImagen()
    imagen = Dir.glob("public/logos/#{self.id}.*")
    if (! imagen.empty?)
      return imagen.first.sub("public", "..")
    else
      return "../logos/logo_default.jpg"
    end
  end 
    
  def self.charlasPendientesDeConferencia(idConferencia)
    listaOrdenada = Charla.filtrarCharlasPorEstado(idConferencia, EstadoCharla::PROPUESTA)
    
    listaOrdenada.concat(Charla.filtrarCharlasPorEstado(idConferencia, EstadoCharla::ENEVALUACION))
    listaOrdenada.concat(Charla.filtrarCharlasPorEstado(idConferencia, EstadoCharla::EVALUADA))
    
    return listaOrdenada
  end
  
  def tieneCharlasAceptadas?
      Charla.filtrarCharlasPorEstado(self.id, EstadoCharla::ACEPTADA).count >0
  end
  
  def estadoEsNuevo?
    return self.estado == EstadoConferencia::NUEVA
  end
  
  def estadoEsConvocatoriaCerrada?
    return self.estado == EstadoConferencia::CONVOCATORIACERRADA
  end
  
  def estadoEsPublicado?
    return self.estado == EstadoConferencia::PUBLICADA
  end
 
  def tiempoLimiteParaCharlas
    if self.tiempoLimite.nil?
      return 40
    end
    return self.tiempoLimite
  end
  
  def esUsuarioAdministrador?(idUsuario) 
    return AdministradoresConferencia.usuarioPerteneceAAdministradores(self.id, idUsuario)
  end
  
  def sePuedeCerrarPlanificacion()
    Charla.charlasAceptadasPendientesPlanificacion(self.id).empty? && Charla.charlasSinUsuariosModeradores(self.id).empty?
  end
end
